package com.example.mapper;

import com.example.dto.StockRecordQueryDTO;
import com.example.entity.StockRecord;
import com.example.vo.StockRecordVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 库存记录Mapper接口
 */
@Mapper
public interface StockRecordMapper {

    /**
     * 插入库存记录
     *
     * @param stockRecord 库存记录
     * @return 影响行数
     */
    int insert(StockRecord stockRecord);

    /**
     * 根据ID查询库存记录
     *
     * @param id 主键ID
     * @return 库存记录
     */
    StockRecord selectById(@Param("id") Long id);

    /**
     * 根据记录编号查询库存记录
     *
     * @param recordNo 记录编号
     * @return 库存记录
     */
    StockRecord selectByRecordNo(@Param("recordNo") String recordNo);

    /**
     * 分页查询库存记录
     *
     * @param queryDTO 查询条件
     * @return 库存记录列表
     */
    List<StockRecordVO> selectPageList(StockRecordQueryDTO queryDTO);

    /**
     * 查询库存记录总数
     *
     * @param queryDTO 查询条件
     * @return 总数
     */
    Long countByQuery(StockRecordQueryDTO queryDTO);

    /**
     * 根据商品ID查询库存记录
     *
     * @param productId 商品ID
     * @return 库存记录列表
     */
    List<StockRecordVO> selectByProductId(@Param("productId") Long productId);

    /**
     * 导出库存记录
     *
     * @param queryDTO 查询条件
     * @return 库存记录列表
     */
    List<StockRecordVO> selectForExport(StockRecordQueryDTO queryDTO);

    /**
     * 分页查询库存记录（带详细信息）
     *
     * @param queryDTO 查询条件
     * @return 库存记录列表
     */
    List<StockRecordVO> selectPageWithDetails(StockRecordQueryDTO queryDTO);

    /**
     * 分页查询管理员库存记录（只查询管理员相关的记录）
     *
     * @param queryDTO 查询条件
     * @return 库存记录列表
     */
    List<StockRecordVO> selectAdminStockRecords(StockRecordQueryDTO queryDTO);

    /**
     * 分页查询店长库存记录（只查询店长相关的记录）
     *
     * @param queryDTO 查询条件
     * @return 库存记录列表
     */
    List<StockRecordVO> selectStoreStockRecords(StockRecordQueryDTO queryDTO);
} 